package adke.gui.animations;

import adke.gui.panels.GFXPanel2;
import adke.managers.AnimationManager;
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

public abstract class Animation
{
    // protected is dus wel toegankelijk voor subclassen
    protected int duration;
    
    private Composite normalComposite;
    
    public Animation()
    {
        duration = -1;
    }
    
    public abstract boolean isDone();
    
    // geef de rect terug waarin iets is veranderd
    public abstract Rectangle nextFrame(Graphics2D g);
    
    public void setDuration(int duration)
    {
        this.duration = duration;
    }
    
    public int getDuration()
    {
        return duration;
    }
    
    public boolean hasDuration()
    {
        return duration != -1;
    }
    
    public void paintTransparant(Graphics2D g2d)
    {
        normalComposite = g2d.getComposite();
        Composite transparant = AlphaComposite.getInstance(AlphaComposite.CLEAR, 1);
        g2d.setComposite(transparant);
    }
    
    public void paintNormal(Graphics2D g2d)
    {
        g2d.setComposite(normalComposite);
    }
    
    public void clear(int x, int y, int w, int h, Graphics2D g2d)
    {
        paintTransparant(g2d);
        
        // hier moeten we een zo groot mogelijk vlak tekenen dat de animatie kan bespannen
        g2d.fillRect(x, y, w, h);
        
        paintNormal(g2d);
    }
    
    public void clear(int x, int y, int w, int h, int xChange, int yChange, Graphics2D g2d)
    {
        paintTransparant(g2d);
        
        // hier moeten we een zo groot mogelijk vlak tekenen dat de animatie kan bespannen
        g2d.fillRect(x-xChange, y-yChange, w+(xChange*2), h+(yChange*2));
        
        paintNormal(g2d);
    }
}
